# Abstract game representation

class Game ():
    
    # return the current player
    def turn(self):
        pass

    # get a set of all valid moves for this game state
    def valid(self):
        pass

    # perform a move, returning the next game state
    def move(self, move):
        pass

    # score the game for each player
    def score(self):
        pass

# Abstract search tree node (i.e. AI that plays a game)

class TreeNode ():

    # return the child node for a given move
    def get_child(self, move):
        pass

    # generate the best move known
    def choose(self):
        pass

    # return expected score
    def get_score(self):
        pass
